import { getDatabase, schema } from "@/db"; import type { NodePgDatabase } from "drizzle-orm/node-postgres"; import { personalAccessTokens } from "@/db/schema"; import { badRequest, notFound, success, unauthorized, } from "@/lib/api"; import { getUserFromRequest } from "@/lib/auth"; import type { APIRoute } from "astro"; import { and, eq } from "drizzle-orm"; import { withErrorHandler } from "@/lib/errors"; import { logger } from "@/lib/logger"; export const DELETE: APIRoute = withErrorHandler(async ({ request, params }) => { const { id } = params; if (!id) return badRequest("Missing ID"); const tokenPayload = await getUserFromRequest(request); if (!tokenPayload) { return unauthorized(); } const db = getDatabase() as NodePgDatabase; // Verify ownership const token = await db.query.personalAccessTokens.findFirst({ where: and( eq(personalAccessTokens.id, id), eq(personalAccessTokens.userId, tokenPayload.userId) ), }); if (!token) { return notFound("Token not found"); } await db.delete(personalAccessTokens).where(eq(personalAccessTokens.id, id)); logger.info({ userId: tokenPayload.userId, tokenId: id }, "Personal Access Token deleted (legacy endpoint)"); return success({ message: "Token deleted" }); });